home *** CD-ROM | disk | FTP | other *** search
/ SPACE 1 / SPACE - Library 1 - Volume 1.iso / program / 385 / prg_2 / prg_2dp.s < prev    next >
Text File  |  1985-11-19  |  8KB  |  212 lines

  1.  ; Program Name: PRG_2DP.S
  2.  ; Version 1.004
  3.  
  4.  ; Assembly Instructions:
  5.  
  6.  ;    Assemble in PC-relative mode and save with a TOS extension.
  7.  
  8.  ; Execution Note:
  9.  
  10.  ;    This program invokes custom traps which must be installed by
  11.  ; TRAPS.PRG and TRAP_10.PRG prior to its execution.  Execute this program
  12.  ; by typing its name on SPEEDTST.TTP's command line.
  13.  
  14.  ;    But before executing this program, prepare three floppy disks.  The
  15.  ; first should be formatted from the desktop, using the ST formatting
  16.  ; algorithm.  The second should be formatted with a version of DCFORMAT,
  17.  ; available from ST Informer, 909 NW Starlite Place, Grants Pass, OR 97526,
  18.  ; (503)476-0071 on disk PDM 188 or PDM 1288.  The price of each disk from
  19.  ; ST Informer is $6.00 for non-subscribers.  You can subscribe for $18.00
  20.  ; per year and get a free disk coupon.  I highly recommend a subscription.
  21.  
  22.  ;    The third disk should be formatted with Dave Small and Dan Moore's
  23.  ; Twister program available on START magazine's Summer, 1988 issue.  You
  24.  ; can find an order form in any issue of START or phone (800)234-7001.
  25.  
  26.  ;    Copy PRG_2DP.TOS to each blank disk.  Copy SPEEDTST.TTP to each disk.
  27.  ; Execute SPEEDTST.TTP on each disk in turn, typing PRG_2DP.TOS on its
  28.  ; command line.  Compare the contents of the WRITE_1 and WRITE_2 files of
  29.  ; each disk to verify that they are identical.  Compare the PRG_2DP.DAT file
  30.  ; on each disk to the others. 
  31.  
  32.  ; Program Function:
  33.  
  34.  ;    This program writes data to WRITE_1.DAT, reads WRITE_1.DAT, then
  35.  ; writes what it has read to WRITE_2.DAT to confirm that it has correctly
  36.  ; written and read the data declared within the data section of the program.
  37.  
  38.  ;    SPEEDTST.TTP will report the load and total execution time for this
  39.  ; program.
  40.  
  41.  ;    Within the program, the time to write the data to WRITE_1.DAT will be
  42.  ; calculated and reported; and the time to read the data from WRITE_1.DAT
  43.  ; will also be calculated and reported; finally, the time to write the data
  44.  ; to WRITE_2.DAT will be calculated and reported.
  45.  
  46.  ;    This program is to be used to compare the write to and read from times
  47.  ; involving three floppy disks, each of which has been formatted with a
  48.  ; different formatting algorithm.
  49.  
  50. fetch_load_time:              
  51.  trap       #3                  ; Returns value of system clock in D0.
  52. release_excess_memory:          ; Also stores after-load time in TRAPS bss.
  53.  lea        program_end, a0     ; Put "end of program" address in A0.
  54.  movea.l    4(a7), a1           ; Put "basepage" address in A1.
  55.  trap       #6                  ; Calculate program size and release memory.
  56.  lea        stack, a7
  57.  
  58. print_heading:
  59.  lea        heading, a0
  60.  bsr        print_string
  61.  
  62. fetch_write_start_time:
  63.  trap       #3
  64.  lea        write_start_time, a0
  65.  move.w     d0, (a0)
  66. create_file_1:
  67.  move.w     #0, -(sp)           ; File attribute = read/write.
  68.  pea        file_1_name         ; For WRITE_1.DAT.
  69.  move.w     #$3C, -(sp)         ; Function = f_create = GEMDOS $3C.
  70.  trap       #1                  ; File handle is returned in D0.
  71.  addq.l     #8, sp
  72.  lea        file_1_handle, a0   ; Store returned file handle.
  73.  move.w     d0, (a0)
  74.  
  75. write_to_file_1:
  76.  pea        string               ; Push address of buffer.
  77.  move.l     #451, -(sp)          ; Number of bytes to write.
  78.  move.w     d0, -(sp)            ; File handle to be written to.
  79.  move.w     #$40, -(sp)          ; GEMDOS function =  write.
  80.  trap       #1
  81.  lea        $C(sp), sp           ; Reposition stack pointer to top of stack.
  82. close_file_1:                    
  83.  move.w     file_1_handle, -(sp) 
  84.  move.w     #$3E, -(sp)          ; Function = GEMDOS $3E = f_close.
  85.  trap       #1
  86.  addq.l     #4, sp
  87. get_end_time:
  88.  trap       #3
  89.  sub.w      write_start_time, d0 ; Subtract start time from end time.
  90.  ext.l      d0                   ; Extend to 32 bits
  91.  trap       #10                  ; Convert to milliseconds and print.
  92.  
  93. set_dta:
  94.  pea        dta                  ; dta = address of 44 byte buffer.
  95.  move.w     #$1A, -(sp)          ; GEMDOS function = set dta.
  96.  trap       #1
  97.  addq.l     #6, sp
  98. print_read_time_label:
  99.  lea        read_msg, a0
  100.  bsr        print_string
  101. fetch_read_start_time:
  102.  trap       #3
  103.  lea        read_start_time, a0
  104.  move.w     d0, (a0)
  105.  
  106.  ; NOTE: Reading is so fast, must loop to accumulate enough time to measure.
  107.  
  108.  move.w     #99, d3              ; Set up counter for 100 loops.
  109. search_for_file: 
  110.  move.w     #0, -(sp)            ; Attribute = normal access.
  111.  pea        file_1_name          ; Name of file to search for.
  112.  move.w     #$4E, -(sp)          ; GEMDOS function = search first.
  113.  trap       #1
  114.  addq.l     #8, sp
  115.  tst        d0
  116.  bne.s      not_found
  117.  
  118. read_WRITE_1_DAT:
  119.  lea        dta, a0
  120.  pea        buffer
  121.  move.l     $1A(a0), -(sp)       ; Number of bytes to read.
  122.  move.w     file_1_handle, -(sp) ; File to read.
  123.  move.w     #$3F, -(sp)          ; GEMDOS function = read.
  124.  trap       #1
  125.  lea        $C(sp), sp           ; Reposition stack pointer.
  126.  dbra       d3, search_for_file
  127. _get_end_time:
  128.  trap       #3
  129.  sub.w      read_start_time, d0  ; Subtract start time from end time.
  130.  ext.l      d0                   ; Extend to 32 bits
  131.  trap       #10                  ; Convert to milliseconds and print.
  132.  
  133. print_write_time_label:
  134.  lea        write_msg, a0
  135.  bsr        print_string
  136. _fetch_write_start_time:
  137.  trap       #3
  138.  lea        write_start_time, a0
  139.  move.w     d0, (a0)
  140. create_file_2:
  141.  move.w     #0, -(sp)            ; File attribute = read/write.
  142.  pea        file_2_name          ; For WRITE_2.DAT.
  143.  move.w     #$3C, -(sp)          ; Function = f_create = GEMDOS $3C.
  144.  trap       #1                   ; File handle is returned in D0.
  145.  addq.l     #8, sp
  146.  lea        file_2_handle, a0    ; Store returned file handle.
  147.  move.w     d0, (a0)
  148. write_to_file_2:
  149.  lea        dta, a0
  150.  pea        string               ; Push address of buffer.
  151.  move.l     $1A(a0), -(sp)       ; Number of bytes to write.
  152.  move.w     d0, -(sp)            ; File handle to be written to.
  153.  move.w     #$40, -(sp)          ; GEMDOS function =  write.
  154.  trap       #1
  155.  lea        $C(sp), sp           ; Reposition stack pointer to top of stack.
  156. close_file_2:        
  157.  move.w     file_2_handle, -(sp) 
  158.  move.w     #$3E, -(sp)          ; Function = GEMDOS $3E = f_close.
  159.  trap       #1
  160.  addq.l     #4, sp
  161. _get__end_time:
  162.  trap       #3
  163.  sub.w      write_start_time, d0 ; Subtract start time from end time.
  164.  ext.l      d0                   ; Extend to 32 bits
  165.  trap       #10                  ; Convert to milliseconds and print.
  166.  
  167. not_found:
  168.  trap       #8                   ; Terminate.
  169.  
  170. print_string:
  171.  pea        (a0)
  172.  move.w     #9, -(sp)
  173.  trap       #1
  174.  addq.l     #6, sp
  175.  rts
  176.  
  177.  data
  178. file_1_name: dc.b 'WRITE_1.DAT',0     
  179. file_2_name: dc.b 'WRITE_2.DAT',0
  180. heading:     dc.b 'PRG_2DP.TOS Execution Results',$D,$A,$D,$A
  181.              dc.b '  Time to create, write and close WRITE_1.DAT:   ',0
  182. read_msg     dc.b '  Time to read WRITE_1.DAT into buffer 10 times: ',0 
  183. write_msg:   dc.b '  Time to create, write and close WRITE_2.DAT:   ',0 
  184. string:      dc.b '  This paragraph will be written to a disk file named '
  185.              dc.b 'WRITE_1.DAT.  The time ',$D,$A
  186.              dc.b '  required to write the paragraph will be reported in '
  187.              dc.b 'file PRG_2DP.DAT.',$D,$A
  188.              dc.b '  Then the contents of WRITE_1.DAT will be read into a '
  189.              dc.b 'buffer.  The time ',$D,$A
  190.              dc.b '  required to read the contents of the file will be '
  191.              dc.b 'reported in file ',$D,$A
  192.              dc.b '  PRG_2DP.DAT.  Finally, the contents of the buffer '
  193.              dc.b 'will be written to ',$D,$A
  194.              dc.b '  WRITE_2.DAT so that what has been read can be compared '
  195.              dc.b 'to what was written.',$D,$A,$1A
  196.  
  197.  ; NOTE: The ASCII code for ^Z (control Z) is normally used to mark the end
  198.  ;       of a file so that a program reading the file may look for that mark.
  199.  
  200.  bss
  201.  align
  202. file_1_handle:    ds.w   1
  203. file_2_handle:    ds.w   1
  204. write_start_time: ds.w   1
  205. read_start_time:  ds.w   1
  206. dta:              ds.b  44
  207. buffer:           ds.b 452
  208.                   ds.l  96
  209. stack:            ds.l   0
  210. program_end:      ds.l   0
  211.  end
  212.